package com.majiang.majiang.controller;

import com.majiang.majiang.domain.Player;
import com.majiang.majiang.service.HurlDice;
import com.majiang.majiang.service.InitPlayer;
import com.majiang.majiang.service.ShuffleMaJiang;

import java.util.Scanner;

/**
 *
 * @author Administrator
 * 游戏：整个的游戏流程
 */
public class Game {

    public static void main(String[] args) throws InterruptedException {
        Scanner scanner = new Scanner(System.in);
        //初始化玩家
        InitPlayer initPlayer = new InitPlayer();
        //麻将
        ShuffleMaJiang shuffleMaJiang;

        //骰子
        HurlDice hurlDice;

        System.out.println("【欢迎开始“麻将”小游戏。开始初始化麻将桌...】");
        Thread.sleep(100);
        //洗牌
        shuffleMaJiang = new ShuffleMaJiang();

        System.out.println("【初始化完毕，开始掷骰子】");
        //掷骰子
        hurlDice = new HurlDice();

        System.out.println("【掷骰子完毕，开始第一次起牌（轮流起牌，每次起4张，一共起3轮）】");
        //计算出从整副牌的什么位置开始起牌
        int startIndex = hurlDice.getStartIndex(shuffleMaJiang.getMaJiangs().size(), 4);
        //设置整副牌的开始位置
        shuffleMaJiang.setMaJiangsIndex(startIndex - 1);
        //移动起始位置前的牌到list末尾
        shuffleMaJiang.moveMaJiangs();
        //第一次起牌
        initPlayer.haveFirstBoard(shuffleMaJiang);
        //输出此时玩家双手中的牌
        initPlayer.printPlayer();
        //输出牌局中的整副牌（剩余的牌）
        System.out.println("【此时牌局中的剩余的牌：】");
        shuffleMaJiang.printMaJiangs(0);

        System.out.println("【第一次起牌完毕，开始跳庄（玩家拿第1和第5张，电脑1拿第2张，电脑2拿第3张，电脑3拿第4张）】");
        //第二次起牌：跳庄
        initPlayer.haveJumpBoard(shuffleMaJiang);
        //输出此时玩家双手中的牌
        initPlayer.sort();
        initPlayer.printPlayer();
        //输出牌局中的整副牌（剩余的牌）
        System.out.println("【此时牌局中的剩余的牌：】");
        shuffleMaJiang.printMaJiangs(0);

        System.out.println("【跳庄完毕，开始翻癞子（癞子可以当成是任何一张牌）】");
        //翻癞子
        initPlayer.haveWildBoard(shuffleMaJiang);
        //判断是否为天胡
        if(initPlayer.getPlayer().tianHuCards()){
            System.out.println("【" + initPlayer.getPlayer().getName() + "天胡】");
            shuffleMaJiang.huEnd();
        }
        initPlayer.getPlayer().chupai(scanner, shuffleMaJiang);
        initPlayer.recomputeNextPlayer();
        //以下是正式打麻将的逻辑，还存在很多问题
        int i = 0;
        while(true){
            //输出河里的牌
            Player player;
            if(initPlayer.touchAndBar(scanner, shuffleMaJiang)){
                player = initPlayer.getCurrentPlayer();
            }else{
                player = initPlayer.getCurrentPlayer();
                player.gainMaJiang(shuffleMaJiang, 0);
            }
            initPlayer.printPlayer();
            if(player.huCards()){
                if(i == 0){
                    System.out.println("【" + player.getName() + "地胡】");
                }
                shuffleMaJiang.huEnd();
                break;
            }
            if(!player.getName().equals("玩家")){
                System.out.println("【" + player.getName() + "打出了：" + player.aiChupai(shuffleMaJiang) + "】");
            }else{
                player.chupai(scanner, shuffleMaJiang);
            }
            player.isJiaoHuCard(shuffleMaJiang);
            initPlayer.recomputeNextPlayer();
            shuffleMaJiang.isEnd();
            i++;
        }
    }

}
